// import {
//   stringToBase64
// } from 'src/utils/codeChange';

export default {
  methods: {
    /**
     * 判断iframe加载是否成功函数
     * @param {object} tabObj tab标签页对象
     */
    isFrameLoaded(tabObj) {
      const { frameTabs } = this.$store.state.mainVuex;
      var link = document.createElement('link');
      link.rel = 'stylesheet';
      link.type = 'text/css';
      // 这里设置需要检测的url
      link.href = tabObj.url;

      link.onload = () => {
        console.log('frame加载成功');
        this.$store.dispatch('setFrameTabsItem', {
          index: frameTabs.length - 1,
          val: false
        });
        this.$store.dispatch('setFrameLoading', false);
        document.body.removeChild(link);
      };
      link.onerror = () => {
        console.log('frame加载失败');
        this.$store.dispatch('setFrameTabsItem', {
          index: frameTabs.length - 1,
          val: true
        });
        document.body.removeChild(link);
        // 关闭frame加载中
        this.$store.dispatch('setFrameLoading', false);
      };
      document.body.appendChild(link);
    },
    /**
     * 点击菜单跳转页面函数
     * @url 跳转的路由地址
     * @menusName 菜单中文名称
     * @isLastLevel 是否为最后一个等级的菜单
     */
    toPage(url, menusName, code, isLastLevel, init) {
      console.log('url, menusName, code, isLastLevel, init', url, menusName, code, isLastLevel, init);
      if (url) {
        const id = url.replace(/\//g, '');
        const origin = location.origin;
        let toUrl = this.toNoIndexPage(url);

        if (url.includes('.html') && !url.includes('.html#')) {
          const urlArr = url.split('html');
          toUrl = urlArr[0] + 'html#' + urlArr[1];
          toUrl.endsWith('#') && (toUrl += '/');
        }

        // 增加tab标签页
        const tabObject = {
          title: menusName,
          name: toUrl.split('/').pop(),
          id: id + code,
          url: toUrl,
          code: code
        };
        this.addFrameTab(tabObject);
        this.isFrameLoaded(tabObject);

        // 设置面包屑导航
        this.setBreadCrumdByMenu({
          label: menusName,
          code,
          sysUrl: url
        });
        const newurl = url.split('/').pop();
        // pop表达式返回删除的数据
        this.handleRouter(toUrl, menusName, id + code);
        console.log('...............', newurl);
        // 路由跳转默认参数
        this.$router.push({ name: newurl });
        // window.open('http://localhost:3006/index.html#/salesOrg');
      } else {
        console.error('【toPage】函数执行错误，路由的地址为空');
      }
    },
    addFrameTab(tabObj) {
      // 打开frame加载中
      this.$store.dispatch('setFrameLoading', true);

      const { frameTabs } = this.$store.state.mainVuex;
      const hasTabs = frameTabs.filter(item => item.id === tabObj.id).length > 0;
      if (!hasTabs) {
        frameTabs.push(tabObj);
        this.$store.dispatch('setFrameTabs', frameTabs);
        // 设置tab标签页的激活项
        this.$store.dispatch('setFrameTabsName', tabObj.name);
      } else {
        // 设置tab标签页的激活项
        this.$store.dispatch('setFrameTabsName', tabObj.name);
      }
    },
    /**
     * 通过菜单点击设置面包屑导航
     * @param {Object} menuObj 面包屑的最后一级对象
     * @param {string} menuObj.label 菜单的中文名
     * @param {string} menuObj.code 菜单code
     * @param {string} menuObj.sysUrl 菜单的系统url前缀
     * */
    setBreadCrumdByMenu(menuObj) {
      // const {
      //   breadcrumb
      // } = this.$store.state.mainVuex;
      //
      // const tempBreadcrumb = [breadcrumb[0]];
      console.log('0');
      let tempBreadcrumb = [];
      const parentCode = menuObj.code.slice(0, menuObj.code.length - 2);
      this.findParent(parentCode, this.flatMenus, tempBreadcrumb);
      tempBreadcrumb.push({
        name: menuObj.sysUrl + menuObj.code,
        cnName: menuObj.label,
        // path: menuObj.sysUrl,
        code: menuObj.code
      });
      tempBreadcrumb = this.tempBreadcrumbSort(tempBreadcrumb);
      this.$store.dispatch('setBreadcrumb', tempBreadcrumb);
      console.log('面包屑', tempBreadcrumb);
      console.log('this.$store.state.mainVuex', this.$store.state.mainVuex);
    },
    // 菜单tempBreadcrumb排序
    tempBreadcrumbSort(arr) {
      let numArr = [];
      const menuList = [];
      if (arr.length === 0) return;
      numArr = arr.map((item, index) => {
        return item.code.length;
      }).sort((a, b) => a - b);
      numArr.forEach((item, index) => {
        for (let i = 0; i < arr.length; i++) {
          if (item === arr[i].code.length) {
            menuList.push(arr[i]);
          }
        }
      });
      return menuList;
    },
    /**
     * 寻找当前才当的父菜单，并且改变面包屑导航
     * @param {string} code 当前菜单的code
     * @param {Array}  srcArr 菜单数组源
     * @param {Array}  targetArr 要改变的数组源（面包屑导航数组）
     */
    findParent(code, srcArr, targetArr) {
      const length = srcArr.length;
      for (let i = 0; i < length; i++) {
        const item = srcArr[i];
        if (item.code === code) {
          const noItem = targetArr.filter(targetItem => targetItem.code === code).length === 0;
          if (noItem) {
            targetArr.push({
              name: item.sysUrl + item.code,
              cnName: item.label,
              path: item.sysUrl,
              code: item.code
            });
          }
        }
      }
      // 如果当前code不是最终节点，则继续寻找上一级节点
      if (code.length !== 2 && code.length !== 3) {
        const parentCode = code.slice(0, code.length - 2);
        this.findParent(parentCode, srcArr, targetArr);
      }
    },
    /**
     * 处理页面跳转函数
     * @param {string} url 跳转的路由地址
     * @param {string} menusName 菜单中文名称
     * @param {string} frameId 当前iframe的id
     */
    handleRouter(url, menusName, frameId) {
      // 特殊路由跳转系统集合
      const exRouterArr = [
        'cprop-web', // 财险理赔
        'chtac-web', // 意健险理赔
        'cauto-web', // 车险理赔
        'ndc-web', // 报案调度中心
        'um-web', // UM
        'doc-web', // 单证
        'law-web', // 诉讼平台
        'auto-dspt-web', // 智能调度
        'rp-web', // 收付系统
        'perform-web' // 销管系统
      ];
      // 判断子系统是否为非路由跳转的系统
      const judgeArr = exRouterArr.filter(item => url.includes(item));

      if (judgeArr.length > 0) {
        // 设置iframe的src地址
        this.$store.dispatch('setFrameUrl', url);
        setTimeout(() => {
          this.handleFrame(url, true, menusName, frameId);
        }, 100);
      } else {
        // 设置iframe的src地址
        this.$store.dispatch('setFrameUrl', url);

        setTimeout(() => {
          this.handleFrame(url, false, menusName, frameId);
        }, 100);
      }
    },
    /**
     *  处理iframe下面的点击事件
     * @param {string} url iframe需要跳转的地址
     * @param {string} exSys 是否为特殊子系统
     * @param {string} menusName 菜单中文名称
     * @param {string} frameId 当前iframe的id
     **/
    handleFrame(url, exSys, menusName, frameId) {
      const frame = document.getElementById(frameId);
      if (!frame) return;
      const frameDoc = frame.contentWindow.document;
      const navExist = $(frameDoc).find('.nav-box')[0];

      frame.onload = () => {
        console.log('iframe加载完毕。,dwj');
        // 关闭frame加载中
        this.$store.dispatch('setFrameLoading', false);
        const load_frameDoc = frame.contentWindow.document;
        /**
         * 处理不是路由跳转的子系统菜单点击
         */
        exSys && handleExWebsite(load_frameDoc);
      };
      frame.onerror = () => {
        console.log('iframe加载错误。404');
      };
      if (navExist) {
        $(frameDoc).find('.main-header').hide();
        $(frameDoc).find('.nav-box').hide();
        exSys && handleExWebsite(frameDoc);
      }

      function handleExWebsite(_frameDoc) {
        console.log('处理不是路由跳转的函数执行');
        // 设置iframe的src地址
        const menuArr = $(_frameDoc).find('.menu-cell .sub-tap, .menu-cell .tap');
        if (menuArr.length > 0) {
          let subMenuItem = null;
          // 检测当前iframe菜单匹配上父系统的菜单项，并且执行点击事件
          for (let i = 0; i < menuArr.length; i++) {
            if (menuArr[i].innerHTML === menusName) {
              subMenuItem = menuArr[i];
              subMenuItem.click();
              break;
            }
          }
        }
      }
    },
    // 处理没有默认index页面的菜单
    toNoIndexPage(url) {
      const tempUrl = {
        '/msg-plat-web/': '/msg-plat-web/message-history.html#/'
      };
      if (tempUrl[url]) return tempUrl[url];
      return url;
    }
  }
};
